Application programs on distributed computer systems in a network are generally based upon the concept of a central manager which resides on a server, exchanging information with agents on remote machines within the network. The installation of agents in such an application environment typically either requires the manual distribution of storage media (e.g., CD-ROMs, or diskettes) on which the agent and its corresponding installation package reside, or the placement of the agent install package on a server for downloading. Utilizing manual distribution results in time-consuming administrative procedures associated with the distribution of the agent's physical storage media. Even greater time is needed due to the heterogeneous network environment that includes systems with differing operating systems, thus requiring multiple versions of the agent software.
While utilizing a server does alleviate some of the distribution difficulties of a manual approach, it is not without problems. The efforts to place the install package on the server remains a somewhat manual administrative procedure, where the procedure typically varies among networks and is prone to human error. Further, the use of a server does not guard against code versioning problems, which result when the application's multiple agents potentially have been downloaded at varying times and are not all the latest version of code.
Thus, software distribution and installation remain concerns for both vendors and customers. Recent Internet and Web technology reemphasize a dynamic approach for software updating in applications by allowing replacement of loaded class files at any time. Wide use is made of this feature in the Internet browser environment, where the latest data files, Web pages, images, etc., are downloaded from a Web server to the Browser client when the client makes a request. However, it is difficult to implement dynamic distribution for non-browser Java applications and applets, since the new class files or modules do not take effect until the next time the Java Virtual Machine (JVM) running on the computer system is started. Further, `loaded` native libraries, (e.g., files *.dll, *.nlm, *.so, *.sl, etc.), are normally locked by the operating system when they are loaded into memory and thus cannot be replaced. Therefore, most current Java applications detect old code versions and perform updates only when the applications are started, not when the applications are running.
Accordingly, a need exists for dynamic updating of a code version for a Java application. The present invention addresses such a need.